package com.edu.service.handler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * @Author:mx
 * @Date:2025/11/10-16:48:53
 *     自定义的调度处理器 目的时 规定 如何对被代理对象进行增强。
 *      代理对象的所有方法的执行 都会通过 这个接口的 invoke方法来执行，
 *
 *
 */
public class LogHandler implements InvocationHandler {


    private Object target;

    public LogHandler(Object target) {
        this.target = target;
    }

    /**
     *
     * @param proxy 代表生成的代理对象
     * @param method 要执行的方法的信息 的执行对象 应该是被代理对象
     * @param args   传递过来的方法的参数
     * @return
     *          代理对象执行完 指定方法之后的返回值
     *
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //实现选择某些方法 进行 增强

        if (method.getName().startsWith("select")) {
            try{
                System.out.println("执行了 前置环绕");
//                System.out.println("执行了 前置通知");
                //beforeAdvise();
                Object result = method.invoke(target, args);
                //afterReturningAdvise();
//
                System.out.println("执行了 后置返回通知");
                return result;
            }catch (Exception e){
//                e.printStackTrace();
//                System.out.println("执行了后置异常通知");
                //afterThrowingAdvise();
                return null;
            }finally{
                // afterAdvise();
                System.out.println("执行了 后置通知");
            }
            //System.out.println("执行了 环绕后置");
        } else {

            return method.invoke(target, args);

        }
    }
}

